package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.ContractType;
import org.apache.ibatis.annotations.Param;

/**
 * 合同类型Mapper接口
 * 
 * @author ruoyi
 */
public interface ContractTypeMapper 
{
    /**
     * 查询合同类型
     * 
     * @param typeId 合同类型主键
     * @return 合同类型
     */
    public ContractType selectContractTypeByTypeId(Long typeId);

    /**
     * 查询合同类型列表
     * 
     * @param contractType 合同类型
     * @return 合同类型集合
     */
    public List<ContractType> selectContractTypeList(ContractType contractType);

    /**
     * 查询合同类型树列表
     * 
     * @return 所有合同类型信息
     */
    public List<ContractType> selectContractTypeTreeList();

    /**
     * 根据角色ID查询合同类型树信息
     * 
     * @param roleId 角色ID
     * @return 选中合同类型列表
     */
    public List<Integer> selectContractTypeListByRoleId(Long roleId);

    /**
     * 新增合同类型
     * 
     * @param contractType 合同类型
     * @return 结果
     */
    public int insertContractType(ContractType contractType);

    /**
     * 修改合同类型
     * 
     * @param contractType 合同类型
     * @return 结果
     */
    public int updateContractType(ContractType contractType);

    /**
     * 删除合同类型
     * 
     * @param typeId 合同类型主键
     * @return 结果
     */
    public int deleteContractTypeByTypeId(Long typeId);

    /**
     * 批量删除合同类型
     * 
     * @param typeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteContractTypeByTypeIds(Long[] typeIds);

    /**
     * 修改子元素关系
     * 
     * @param contractTypes 子元素
     * @return 结果
     */
    public int updateContractTypeChildren(@Param("contractTypes") List<ContractType> contractTypes);

    /**
     * 根据ID查询所有子合同类型
     * 
     * @param typeId 合同类型ID
     * @return 合同类型列表
     */
    public List<ContractType> selectChildrenContractTypeById(Long typeId);

    /**
     * 校验合同类型名称是否唯一
     *
     * @param typeName 合同类型名称
     * @param parentId 父合同类型ID
     * @return 结果
     */
    public ContractType checkContractTypeNameUnique(@Param("typeName") String typeName, @Param("parentId") Long parentId);

    /**
     * 查询是否存在合同类型子节点
     * 
     * @param typeId 合同类型ID
     * @return 子节点数量
     */
    public int hasChildByContractTypeId(Long typeId);

    /**
     * 查询合同类型是否存在合同
     * 
     * @param typeId 合同类型ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean hasContractByContractTypeId(Long typeId);

    /**
     * 查询合同类型正常状态的子节点数量
     *
     * @param typeId 合同类型ID
     * @return 子节点数量
     */
    public int selectNormalChildrenContractTypeById(Long typeId);
}
